//
//  XGOAuthController.swift
//  WeIBo
//
//  Created by 苏文潇 on 2017/3/7.
//  Copyright © 2017年 苏文潇. All rights reserved.
//

import UIKit
import SVProgressHUD

//  App Key：569289079
//  App Secret：99d72996375db3347ef45501cd331295
//回调code： https://www.baidu.com/?code=60436cd02ddc3eb23893099d117ec3be
//定义授权的唯一ID
let appKey = "569289079"
//定义授权回调页
let Redirect_uri = "http://www.itcast.cn"

let AppSecret = "99d72996375db3347ef45501cd331295"

class XGOAuthController: UIViewController {

    
 //    MARK: 懒加载控件
    private lazy var webView: UIWebView = UIWebView()

//    MARK:重写loadView是为了显示webView
    override func loadView() {
        
        view = webView
        
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        webView.delegate = self
        
        addBarButtonItems()
        
        self.setUrl()
    }
    
    
    
//    MARK:  添加左右的UIBarButtonItem
    private func addBarButtonItems()
    {
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: #selector(leftButtonClick))
        
        navigationItem.title = "微博登录"
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "返回", target: self, action: #selector(rightButtonClick))
        
    }

    
//    MARK:  加载webView
    private func setUrl()
    {
        
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(appKey)&redirect_uri=\(Redirect_uri)"

        let request = URLRequest(url: URL(string: url)!)
        
        webView.loadRequest(request)
    }
    
    
//    MARK: 监听UIBarButtonItem点击
    @objc private func leftButtonClick()
    {
        webView.stringByEvaluatingJavaScript(from: "document.getElementById('userId').value = '13031653612', document.getElementById('passwd').value = 'suwenxiao..521'")
    }
    
    @objc private func rightButtonClick()
    {
        dismiss(animated: true, completion: nil)
        SVProgressHUD.dismiss()
    }
    
    
//    //    MARK:通过code获取accessToken值
////    private 表示更加私有， 在扩展里面也不能访问  swift 3.0
////    fileprivate 表示私有，但是可以在扩展里面访问
//    fileprivate func requestAccessToken(code: String)
//    {
//        XGAFNetworkingTools.sharedTools.OAuthLoad(code: code, callBack: {(response, error) -> () in
//            if (error != nil) {
//                print(error!)
//                return
//            }
////            代码执行到此，说明有数据
////            print(response!)
//            let dic = response as! [String: Any]
//            
//            let userAccount = XGTokenUserAccount(dic: dic)
//            
//            self.requsetUserInfo(userAccount: userAccount)
//        })
//    }
//    
// //    MARK: 通过uid和access_token获取用户信息
//    
//    private func requsetUserInfo(userAccount: XGTokenUserAccount){
//        
//        XGAFNetworkingTools.sharedTools.requestUserMessage(userAccount: userAccount, callBack: {(response, error) -> () in
//            
//            if error != nil {
//                print(error!)
//                return
//            }
//        
////            print(response)
//            let dic = response as! [String: Any]
//            
//            let userInfo = XGTokenUserAccount(dic: dic)
////            print(userInfo.name!,  userInfo.avatar_large!)
//
////            对模型中的属性进行归档
//            userInfo.saveUserAccount()
//            
//        })
//    }
    
    
    
}

extension XGOAuthController: UIWebViewDelegate {
    
//    将要加载
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
//        如果url为nil就不在加载，直接返回
        guard let url = request.url else {
            return false
        }
        
//        print("url == ", url)  //打印的是一个url
//        print("host == " + url.host!) // 是一个主机地址
//        print("absoluteURL == " ,url.absoluteURL) //是一个绝对路径，其实就是url
//        print("absoluteString == " + url.absoluteString) //是将url装换成的一个字符串
//        代码执行到此处说明url不为nil
//        这里取反就是为了判断只要不是这个就直接过，说明不是我们关心的回调地址
//        这里是判断的是不是回调页的地址。如果是再继续下一步
        if !url.absoluteString.hasPrefix(Redirect_uri) {
            return true
        }
        
//        print("query == ", url.query!)// 打印出来的就是获取的参数
        if let query = url.query, query.hasPrefix("code=")
        {
            let startIndex = "code=".endIndex
//            获取code码。这里的code，要改成平台给的App Secret码
            let code = query.substring(from: startIndex)
//            print(code)
//            requestAccessToken(code: code)
            
            XGUserAccountViewModel.sharedUserAccount.requestAccessToken(code: code, callBack: { (isSussess) in
                if isSussess
                {
                    print("登录成功")
//            这里会有一bug，就是在通知发出去之后，转换完视图层次结构有问题，需要进行dismiss控制器，这里dissmiss需要一个时间点，如果直接dismiss之后在发送通知，控制器不会被销毁，这里dismiss有一个方法就是在dismiss结束之后在发通知
                    self.dismiss(animated: false, completion: {
                        NotificationCenter.default.post(name: NSNotification.Name(SwitchNotification), object: self)
                    })
  
                }
                else
                {
                    print("登录失败")
                }
            })
            
        }
        else
        {
//            如果不知道什么原因的话，直接在if判断上断点，看打印的url就知道为什么了，这里选择取消授权返回的url和上面的不同。没有 code= 
             self.dismiss(animated: true, completion: nil)
        }
//        这里必须retun的是false，如果是true的话，他会直接跳转到指定的网页，就是不希望他在去往下执行
        return false
    }
    
    
    
    
//    开始加载
    func webViewDidStartLoad(_ webView: UIWebView)
    {
//        print("开始加载")
        SVProgressHUD.show()
    }
    
//    加载完成
    func webViewDidFinishLoad(_ webView: UIWebView)
    {
//        print("加载完成")
        SVProgressHUD.dismiss()
    }
    
//    加载失败
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error)
    {
//        print("加载失败")
        SVProgressHUD.dismiss()
    }
    
}

